﻿import time
from playwright.sync_api import sync_playwright
import os
import json

# --- 配置 ---
# 最终保存的认证文件名
AUTH_FILE = "auth_state.json"
# 微博登录页
WEIBO_LOGIN_URL = "https://weibo.com/login.php"

# 方法1: 基本读取
def read_json_file(filename):
    """读取JSON文件并返回Python对象"""
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            data = json.load(file)
            return data
    except FileNotFoundError:
        print(f"错误: 文件 '{filename}' 不存在")
        return None
    except json.JSONDecodeError as e:
        print(f"错误: JSON 解析失败 - {e}")
        return None
    except Exception as e:
        print(f"错误: 读取文件时发生异常 - {e}")
        return None

def run():
    with sync_playwright() as p:
        # 启动 Chromium 浏览器
        # headless=False 意味着我们会看到一个真实的浏览器窗口
        browser = p.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()

        print("正在打开微博登录页...")
        page.goto(WEIBO_LOGIN_URL)

        print("-" * 50)
        print("请在弹出的浏览器窗口中手动完成登录（推荐使用扫码）。")
        print("登录成功后，脚本会自动检测并保存状态。")
        print("登录成功后浏览器将保持打开状态，您可以手动关闭。")
        print("-" * 50)

        # 等待用户登录成功
        # 登录成功后，页面URL会跳转到 "https://weibo.com/"
        # 我们设置 timeout=0，意味着无限期等待，直到用户登录成功
        try:
            page.wait_for_url("https://weibo.com/", timeout=0)
        except Exception as e:
            print(f"等待登录时发生错误: {e}")
            # 即使出错也让用户决定是否关闭浏览器
            print("发生错误，但浏览器将保持打开供您检查...")
            input("按回车键手动关闭浏览器...")
            browser.close()
            return

        print("\n检测到登录成功！")
        time.sleep(2)  # 等待2秒，确保所有状态都已加载

        # 保存当前浏览器的所有状态（Cookies, Local Storage等）到文件中
        context.storage_state(path=AUTH_FILE)

        # 保存cookies到单独文件
        json_data = read_json_file('auth_state.json')
        if json_data:
            cookies = json_data.get("cookies", [])
            data = {}
            for value in cookies:
                data[value['name']] = value['value']

            file_path = 'weibo_cookies.json'
            # 写入JSON数据到文件
            with open(file_path, 'w') as file:
                json.dump(data, file, indent=4)

        print(f"✅ 登录状态已成功保存到文件: {os.path.abspath(AUTH_FILE)}")
        print("✅ Cookies已保存到: weibo_cookies.json")
        print("-" * 50)
        print("🔵 浏览器将保持打开状态...")
        print("您可以在浏览器中继续操作，或者手动关闭浏览器窗口。")
        print("-" * 50)

        # 不再自动关闭浏览器，让用户手动控制
        try:
            # 让用户决定何时关闭
            input("按回车键手动关闭浏览器...")
        except KeyboardInterrupt:
            print("\n用户中断，关闭浏览器...")
        finally:
            browser.close()

if __name__ == "__main__":
    run()
